<?php
declare (strict_types = 1);

namespace app\common\validate;

use think\Validate;
use app\common\model\content\Category;
use app\common\model\content\Topic as TopicModel;

class Topic extends Validate
{
    /**
     * 定义验证规则
     * 格式：'字段名'	=>	['规则1','规则2'...]
     *
     * @var array
     */	
	protected $rule = [
        'name'        => 'require|max:12|checkUniqueByUser',
        'desc'        => 'require|max:255',
        'image'       => 'require|max:125|isFile',
        'category_id' => 'require|checkExist'
    ];
    
    /**
     * 定义错误信息
     * 格式：'字段名.规则名'	=>	'错误信息'
     *
     * @var array
     */	
    protected $message = [
        'name.require' => '名称必须',
        'name.max'     => '名称最多不能超过12个字符',
        'name.checkUniqueByUser'  => '名称已经存在',
        'desc.require' => '描述必须',
        'desc.max'     => '描述最多不能超过255个字符',
        'image.require'=> '图片必须',
        'image.max'    => '图片最多不能超过125个字符',
        'image.isFile'      => '请重新选择图片.',
        'category_id.require'  => '所属分类必须',
        'category_id.checkExist'  => '所属分类无效'
    ];


    // 自定义验证规则判断分类id是否有效
    protected function checkExist($value)
    {
        return (bool) Category::where(['id'=>$value])->count();
    }

    protected function checkUniqueByUser($value, $rule, $data=[])
    {
        $editWhere = !empty($data['id']) ? [['id', '<>', $data['id']]] : [];
        return (bool) !TopicModel::where([
            'name'=>$value,
            'user_id' => app()->user->getId(),
            ])
            ->where($editWhere)
            ->count();
    }

    // 自定义验证规则判断分类id是否有效
    protected function isFile($value, $rule, $data=[])
    {
        $file1 = config('filesystem.disks.local.root') . DS . ltrim($value, '\\/');
        $file2 = config('filesystem.disks.public.root') . DS . ltrim($value, '\\/');
        return is_file($file1) || is_file($file2);
    }
}
